//数据库相关操作
const mysql = require('mysql2/promise')
const config = require('../config/index.js')//引入数据库配置文件

//创建连接池
//连接池通过重用以前的连接来帮助减少连接到 MySQL 服务器所花费的时间，当你完成它们时让它们保持打开而不是关闭。
//这改善了查询的延迟，因为您避免了建立新连接所带来的所有开销。
const pool = mysql.createPool({//创建连接池
    host: config.db.host,
    port: config.db.port,
    user: config.db.user,
    password: config.db.password,
    database: config.db.database//数据库名称
})
//执行sql语句
const allServices = {//创建一个包含数据库操作方法的对象
    async query(sql, values) {//自己封装的查询方法，接收SQL语句和参数
       try{
         //通过连接池连接mysql
        const conn = await pool.getConnection()//从连接池获取数据库连接
        //执行各种增删改查的sql语句
        const [rows,fields]=await conn.query(sql, values)//执行SQL查询，获取结果集
        //rows为查询语句的结果数据,为数组类型
        //fields为查询语句的结果字段详细信息
        // 不要忘记释放连接！
        pool.releaseConnection(conn);//将连接释放回连接池
        return Promise.resolve(rows)//返回查询结果,Promise.resolve()将结果包装成Promise对象,并是成功状态
       }catch(error){
        return Promise.reject(error)//返回错误信息,Promise.reject()将错误信息包装成Promise对象,并是失败状态
       }
    }
}
//查询详情
const findNoteDetailById=(id)=>{
    let _sql=`select * from note where id='${id}';`
    return allServices.query(_sql)
}
//查询页数总数
const findNoteTotalByType=(note_type,userId)=>{
    let _sql=`select count(*) as count from note where note_type='${note_type}' and user_id='${userId}';`
    return allServices.query(_sql)
}
//查询笔记列表
const findNoteListByType=(note_type,userId,page,size)=>{
    let _sql=`select * from note where note_type='${note_type}' and user_id='${userId}' limit ${(page-1)*size},${size};`
    return allServices.query(_sql)
}
// 登录要执行的函数
const userLogin=(username,password) => { // 定义登录处理函数
    let _sql=`select * from user where username='${username}' and password='${password}';` // 构建SQL查询语句
    return allServices.query(_sql) // 调用查询方法执行登录验证
}
//查找账号是否存在
const findUser=(username)=>{
    let _sql=`select * from user where username='${username}';`
    return allServices.query(_sql)
}
//注册要执行的函数
const userRegister=(data)=>{
    let _sql=`insert into user (username,password,nickname,create_time) values ('${data.username}','${data.password}','${data.nickname}',${data.create_time});`
    return allServices.query(_sql)
}
module.exports={
    userLogin,
    findUser,
    userRegister,
    findNoteListByType,
    findNoteDetailById,
    findNoteTotalByType
}